#include <semaphore.h>
namespace sem_module
{
    class sem
    {
    private:
        sem_t _sem;
    public:
        //pshared: 0表示线程间，非0表示进程间
        //val: 信号量初始值
        sem(int pshared = 0, unsigned int val = 0);
        
        ~sem();

        int wait();

        int post();
    };
    
    sem::sem(int pshared, unsigned int val)
    {
        int err = sem_init(&_sem, pshared, val);
        //错误处理（日志）
        //...
    }
    
    sem::~sem()
    {
        int err = sem_destroy(&_sem);
        //错误处理（日志）
        //...
    }
    

    int sem::wait()
    {
        int err = sem_wait(&_sem);
        return err;
    }

    int sem::post()
    {
        int err = sem_post(&_sem);
        return err;
    }
    
}
